package com.cskaoyan.javase._1extends._9override;

/**
 * 注解"@Override"(重写,覆盖)
 * 该注解放在子类重写父类的方法头上面,用来检验当前子类方法,是否是重写自父类
 *      1.如果是,那就不会编译报错
 *      2.如果不是,那就会编译报错
 * 强调:
 *      在实际写代码过程中,如果某个方法是重写自父类
 *      那么必须在该方法头的上面写注解"@Override"
 *      一方面可以校验语法,避免误以为不是重写的方法为重写
 *      另一方面可以增加代码可读性
 *
 *
 * 方法覆盖的具体语法
 * 首先,方法覆盖指的是,子类中和父类有同名的成员方法
 * 对于父类中的成员方法:
 * [访问权限修饰符] 返回值类型 方法名(形参列表){
 *     // 方法体
 * }
 * 子类中的重写父类成员方法,要求:
 *      1.访问权限修饰符有要求吗?
 *          有要求
 *          子类中重写的方法,要么和父类方法保持一致的访问权限,要么就更宽松,不能更严格
 *
 *      2.返回值类型有要求吗?
 *          有要求
 *          子类中重写方法的返回值类型,必须和父类方法的返回值类型,保持"兼容"
 *          什么叫做兼容呢?
 *          (提示: 肯定不是必须保持完全一致,可以考虑自动类型转换)
 *
 *      3.方法名有要求吗?
 *          有要求,父子类重写方法的方法名必须保持一致
 *
 *      4.形参列表有要求吗?
 *          有要求,必须保持完全一致,一模一样(数据类型,个数,位置)
 *          当然,形参的名字无需保持一致
 *
 *      5.方法体有要求吗?
 *          没有要求,随便重写,保持一致,空着等都是可以的
 *
 *
 * 过时的面试题
 * 方法的重写(override) vs 方法的重载(overload)
 *
 * @since 11:07
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
}

class A {
    int test(int a) {
        return 0;
    }

    void test2(){}
}

class ASon extends A {
    @Override
    int test(int b) {
        return 0;
    }
    void test2(){
        super.test2();
    }
}